export default (() => {
  // cache
  const cache = {};
  return function(name: string, defaultValue: string | number | boolean, type: 'string' | 'number' | 'boolean') {
    // 缓存中存在该对象，直接返回
    if (cache[name]) {
      return cache[name];
    }
    const argv = process.argv;
    // 只读取带有--的参数
    const pname = '--' + name;
    const index = argv.indexOf(pname);
    const val = argv[index + 1];

    // 如果不存在该参数，返回默认值
    if (index === -1 || index === argv.length - 1) {
      return (cache[name] = defaultValue);
    }
    // 如果是--开头的参数，返回默认值
    if (val.startsWith('--')) {
      return (cache[name] = defaultValue);
    }
    console.log(`${name}: ${val}`);
    if (type === 'boolean') {
      const ival = parseInt(val);
      if (!isNaN(ival)) {
        return (cache[name] = !!ival);
      }
      if (val === 'true') {
        return (cache[name] = true);
      }
      return (cache[name] = false);
    }
    if (type === 'number') {
      return (cache[name] = parseInt(val));
    }
    return (cache[name] = val);
  };
})();

